package com.liuxinlong.modules.system.service;

import com.liuxinlong.common.ImportResp;
import com.liuxinlong.modules.entity.UserGroup;
import com.liuxinlong.modules.system.dto.GroupMemberUpdateDto;
import com.liuxinlong.modules.system.dto.ImportGroupMemberDto;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 用户分组信息接口
 * 
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2022-07-08
 */
public interface GroupService {
	/**
	 * 分页查询用户分组信息
	 * 
	 * @param queryParam 请求信息
	 * @return 用户分组信息列表
	 */
	List<Map<String,Object>> pageUserGroup(Map<String,Object> queryParam);
	
	/**
	 * 统计用户分组数量
	 * 
	 * @param queryParam 查询参数
	 * @return 用户组数量
	 */
	int countUserGroup(Map<String,Object> queryParam);
	
	/**
	 * 新增用户分组信息
	 * 
	 * @param userGroup 用户分组信息
	 */
	void addUserGroup(UserGroup userGroup);
	
	/**
	 * 更新用户分组信息
	 * 
	 * @param userGroup 用户分组信息
	 */
	void updateUserGroup(UserGroup userGroup);
	
	/**
	 * 删除用户分组信息
	 * 
	 * @param id 用户分组id
	 */
	void deleteUserGroup(String id);

	/**
	 * 导入数据预处理
	 *
	 * @param fileName 文件地址
	 * @return 预处理数据
	 */
	ImportResp importUserGroup(String fileName);

	/**
	 * 批量新增用户分组信息
	 *
	 * @param dataList 用户分组信息列表
	 * @return 失败数据
	 */
	ImportResp batchAddUserGroup(List<UserGroup> dataList);


	/**
	 * 分页查询用户组成员信息
	 *
	 * @param queryParam 请求信息
	 * @return 用户组成员信息列表
	 */
	List<Map<String,Object>> pageGroupMember(Map<String,Object> queryParam);

	/**
	 * 统计用户组成员数量
	 *
	 * @param queryParam 查询参数
	 * @return 用户组成员数量
	 */
	int countGroupMember(Map<String,Object> queryParam);

	/**
	 * 修改用户组成员信息
	 *
	 * @param groupId 用户组id
	 * @param dataList 修改记录
	 */
	void updateGroupMembers(String groupId, List<GroupMemberUpdateDto> dataList);

	/**
	 * 导入数据预处理
	 *
	 * @param fileName 文件地址
	 * @return 预处理数据
	 */
	ImportResp importGroupMember(String fileName);

	/**
	 * 批量新增用户分组关联信息
	 *
	 * @param dataList 用户分组关联信息列表
	 * @return 失败数据
	 */
	ImportResp batchAddGroupMember(List<ImportGroupMemberDto> dataList);

	/**
	 * 导出用户分组信息
	 *
	 * @param response response
	 */
	void exportGroupInfo(HttpServletResponse response);
}
